package 
{
	import com.greensock.events.LoaderEvent;
	import flash.display.Bitmap;
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.net.SharedObject;
	import ru.gosoplata.model.Cookie;
	import ru.gosoplata.model.TmpModel;
	import ru.gosoplata.service.conn.BillAcceptor;
	/**
	 * ...
	 */
	//
	public class Main extends Sprite 
	{
		[Embed(source = "../lib/wait.png")]
		private static const WaitObject:Class;
		
		public function Main():void 
		{
			addEventListener(Event.DEACTIVATE, onDeactivate);
			init();
			
			/*
			var formData:Form = new Form();
			formData.title = "Test";
			formData.filds = new Vector.<Fild>();
			
			var mask:Vector.<Simvol> = new Vector.<Simvol>();
			
			var s:Simvol = new Simvol();
			s.type = Simvol.FIX;
			s.val = "8";
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.SIMBOL;
			s.val = "(";
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.INPUT;
			s.length = 3;
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.SIMBOL;
			s.val = ")";
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.INPUT;
			s.length = 3;
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.SIMBOL;
			s.val = "-";
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.INPUT;
			s.length = 2;
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.SIMBOL;
			s.val = "-";
			mask.push(s);
			
			s = new Simvol();
			s.type = Simvol.INPUT;
			s.length = 2;
			mask.push(s);
			
			var fild:Fild = new Fild();
			fild.title = 'Номер телефона:';
			fild.mask = mask;
			fild.regExp = /^[0-9]{1,3}$/;
			fild.restrict = "0-9";
			fild.maxLength = 3;
			
			var fild1:Fild = new Fild();
			fild1.title = 'qwerty:';
			fild1.mask = mask;
			
			var fild2:Fild = new Fild();
			fild2.title = 'x:';
			fild2.mask = mask;
			
			formData.addFild(fild);
			formData.addFild(fild1);
			formData.addFild(fild2);
			
			var formView:FormView = new FormView();
			var formMediator:FormMediator = new FormMediator(formView, formData);
			
			addChild(formView);
			*/
		}
		
		private function onActivate(e:Event):void 
		{
			if (CONFIG::debug) {
				TmpModel.debugOutput.add('--------------------------------------------- flash work.')
			}
			
			removeEventListener(Event.ACTIVATE, onActivate);
			//TmpModel.acceptor.restart();
			TmpModel.screenController.goIndex();
		}
		
		private function onDeactivate(e:Event):void 
		{
			if (CONFIG::debug) {
				TmpModel.debugOutput.add('--------------------------------------------- flash stoped.')
			}
			
			addEventListener(Event.ACTIVATE, onActivate);
		}
		//
		private function init():void 
		{
			// VIEW
			this.graphics.beginFill(0xF5F5F5);
			this.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			this.graphics.endFill();
			// картинка "загрузка ..."
			var waitobj:Bitmap = new WaitObject();
			waitobj.x = (stage.stageWidth - waitobj.width)/2;
			waitobj.y = (stage.stageHeight - waitobj.height)/2;
			addChild(waitobj);
			// debug textFild
			if (CONFIG::debug) {
				addChild(TmpModel.debugOutput);
			}
			// сервис общения с exe
			TmpModel.acceptor = new BillAcceptor();
			// конфиг
			TmpModel.configService.load(onConfLoaded);
			//TmpModel.debugOutput.add("Main start. Версия интерфейса: " + TmpModel.MAIN_VERSION);
			TmpModel.acceptor.writeLog("Main start. Версия интерфейса: " + TmpModel.MAIN_VERSION);
			
			//XML.ignoreWhitespace = false;
		}
		
		private function onConfLoaded(conf:XML):void 
		{
			TmpModel.config = conf;
			
			TmpModel.acceptor.writeLog("Main onConfLoaded");
			
			TmpModel.loadedImages.preload(onLoaderMaxCompleteLoad);
			//TmpModel.loadedImages.preload(null);
			//onLoaderMaxCompleteLoad();
		}	
		
		private function onLoaderMaxCompleteLoad(event:LoaderEvent=null):void 
		{
			TmpModel.acceptor.writeLog("Main onLoaderMaxCompleteLoad");
			
			removeChildAt(0);//WaitObject
			var contayner:Sprite = new Sprite();
			contayner.graphics.beginFill(0xF5F5F5);
			contayner.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
			contayner.graphics.endFill();
			this.addChild(contayner);
			TmpModel.screenController.initController(contayner);
			
			TmpModel.acceptor.writeLog("Main screenController initController");
			
			if (CONFIG::debug) {
			addChild(TmpModel.debugOutput);
			}
			
			// загрузить платежи
			var cookie:Cookie = TmpModel.cookieService.readCookie();//TODO: переписать - забираем стартовую страницу и параметры остальное нам до фени! 
																	// _operation_ID 
																	// для индекс, чтобы вернул нас сразу обратно!
																	// для ехе - А уже ехе после включения купюрника по этому номеру ищет у себя сдачу и подставляет сумма, как будто ее внесли.
																	// сикретный ключь так же работает
			//
			//
			TmpModel.debugOutput.add("Cookie : href=" + cookie.href + ' ,id=' + cookie.providerId + ' ,operation=' + cookie.operationID );
			
			var sharedObject:SharedObject = SharedObject.getLocal('paymentData');
			TmpModel.payment.saveData=sharedObject.data;
			TmpModel.payment.operation = cookie.operationID;
			if (cookie.href == "end_pay" && TmpModel.payment.operation.length>5) 
			{
				TmpModel.acceptor.checkChange(TmpModel.payment.operation,	function (variables:Object):void 
																			{
																				var arChange:Array = String(variables["Change"]).split(",");
																				var payBack:uint = 0;
																				for each (var change:uint in arChange) 
																				{
																					payBack += change;
																				}
																				TmpModel.payment.payBack = payBack;
																				TmpModel.screenController.showScreenByName("index_services");
				
																				TmpModel.acceptor.writeLog('index service PAYBACK '+TmpModel.payment.payBack);
																			});
			}
			else if(cookie.href=="provider")
			{
				TmpModel.tmpGlobalController.controllerSelectProvider(cookie.providerId);
			}else {
				TmpModel.screenController.showScreenByName(cookie.href);
			}
			
			TmpModel.configService.chekExeVersion();
			
			//TmpModel.debugOutput.add("PaymentsPool: " + JSON.stringify(TmpModel.paymentsPool));
			
			
			// wc 					- туалет
			// index_services		- стартовая сервисов
			// enter_userdata 		- в куксах параметрвы провайдера - по идее тоже самое что и wc
			// enter_exchange_code 
			// info 
			// end_pay 				- только когда сдача осталась 
			// enter_phone			- тоже самое что и enter_userdata только без параметров ибо они подбираются - что не правельно! //TODO:короче wc,enter_userdata,enter_phone одно и то же!!!!
			
			//TODO: нужна проверка на наличие и валидность данных в куксах - обработка ошибки и дефолтная страница
			//TmpModel.tmpGlobalController.action("show_paje", {paje:cookie.href});
			
			
			//if (path == "index_services") {
				//TmpModel.writeDataToSO("false","swwc");
			//}
			//if (TmpModel.readDataFromSO("path") == "index_services") {
				//TmpModel.USINGXCHANGE = true;
			//}
			
		}
	}
}